
package model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Artista extends Usuario implements Serializable{
    
    private String nomeArtistico;
    private String descricaoLivre;
    private ArrayList<String> tags;
    private ArrayList<String> imagens;
    private ArrayList<Album> albuns;
    private Conta contaArtista;

    /**
     * Método construtor definitivo de Artista
     * @param nomeArtistico nome artístico do artista
     * @param descricaoLivre texto de descrição livre que descreva o artista
     * @param usuario usuário que passará a ser artista
     */
    public Artista(String nomeArtistico, String descricaoLivre, Usuario usuario) {
        super(usuario.getRg(), usuario.getCpf(), usuario.getNome(), usuario.getContaUsuario().getSaldo(), usuario.getSexo(), usuario.getEmail(), usuario.getSenha());
        
        this.nomeArtistico = nomeArtistico;
        this.descricaoLivre = descricaoLivre;
        this.tags = new ArrayList<String>();
        this.imagens = new ArrayList<String>();
        this.albuns = new ArrayList<Album>();
        this.contaArtista = new Conta(0, this);
    }

    /**
     * 
     * @return albuns que o artista compôs
     */
    public ArrayList<Album> getAlbuns() {
        return albuns;
    }
    
    /**
     * 
     * @return todas as músicas criadas pelo artista 
     */
    public ArrayList<Musica> getMusicas(){
        
        ArrayList<Musica> retorno = new ArrayList();
        
        Iterator<Album> it = albuns.iterator();
        while(it.hasNext())
        {
            ArrayList<Musica> obj = ((Album)it.next()).getMusicas();            
            Iterator<Musica> it2 = obj.iterator();
            
            while(it2.hasNext())
            {                
                Musica obj2 = it2.next();                 
                retorno.add(obj2);
            }    
        }
        
        HashSet set = new HashSet((Collection) retorno);
        retorno = new ArrayList(set);
                
        return retorno;
    }
    
    /**
     * 
     * @param novoAlbum novo álbum do artista
     */
    public void addAlbum(Album novoAlbum){
        this.albuns.add(novoAlbum);
    }   
    
    /**
     * 
     * @param tag nova tag de pesquisa do artista
     */
    public void addTag(String tag){
        this.tags.add(tag);
    }

    /**
     * 
     * @return conta financeira interna artista
     */
    public Conta getContaArtista() {
        return contaArtista;
    }    
    
    /**
     * 
     * @param imagem link da imagem que será adicionada ao perfil do artista
     */    
    public void addImagem(String imagem){
        this.imagens.add(imagem);
    }

    /**
     * 
     * @return nome artístico do artista
     */
    public String getNomeArtistico() {
        return nomeArtistico;
    }

    /**
     * 
     * @param nomeArtistico novo nome artístico do artista
     */
    public void setNomeArtistico(String nomeArtistico) {
        this.nomeArtistico = nomeArtistico;
    }

    /**
     * 
     * @return descrição em texto livre do artista
     */
    public String getDescricaoLivre() {
        return descricaoLivre;
    }

    /**
     * 
     * @param descricaoLivre nova descrição em texto livre do artísta
     */
    public void setDescricaoLivre(String descricaoLivre) {
        this.descricaoLivre = descricaoLivre;
    }

    /**
     * 
     * @return lista de tags vinculadas ao artísta
     */
    public ArrayList<String> getTags() {
        return tags;
    }

    /**
     * 
     * @return lista de links das imagens vinculadas ao artísta
     */
    public ArrayList<String> getImagens() {
        return imagens;
    }
    
    @Override
    public String toString() {        
        String retorno = super.toString();
        retorno += "--------------------\n"+"Artista:\nNome: " + nomeArtistico + "\nDescrição: " + descricaoLivre + 
                "\nConta Artista - " + contaArtista.toString();
        
        retorno += "\nTags: ";
        Iterator<String> it = tags.iterator();
        while(it.hasNext())
        {
           String obj = it.next();
           retorno += obj + "; ";
        } 
        
        retorno += "\nImagens: ";
        it = imagens.iterator();
        while(it.hasNext())
        {
           String obj = it.next();
           retorno += obj + "; ";
        } 
        retorno += "\n---------\nAlbuns: \n";
        
        Iterator<Album> it2 = albuns.iterator();
        while(it2.hasNext())
        {
           Album obj = it2.next();
           retorno += obj.toString() + "\n";
        }
        return retorno;
    }
    
    @Override
    public boolean equals(Object obj){
        return super.equals(obj);
    }
}